IoC is a design principle where an object's dependencies are provided externally rather than created internally. NestJS implements IoC through its built-in container: you declare what a class needs via constructor parameters, and the container instantiates and injects those dependencies automatically.
Inversion of Control means the framework controls the flow of the program instead of your application code. Rather than a class instantiating its own dependencies, those dependencies are created and provided by an external container.
Classes are decoupled from their dependencies — easier to swap implementations.
Dependencies can be mocked in unit tests without modifying production code.
The container manages object lifecycle, including singleton enforcement.
Reduces boilerplate — no manual new() calls scattered across the codebase.